<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- 单例模式 -->
    <!-- 一个构造函数一生只能有一个实例，无论new多少次，都是这一个实例 -->
    <!-- 适用场景：一个单一对象。比如：弹窗，无论点击多少次，弹窗只应该被创建一次。 -->
    <script>
        function Person() {
            this.name = "涛涛";
        };
        let a = new Person();
        let b = new Person();
        console.log(a === b); //false

        // 单例模式核心代码
        let flag = null;

        function Single() {
            if (!flag) {
                flag = new Person();
            }
            return flag; //之后return的flag是返回第一次的实例
        }

        let p = new Single();
        let q = new Single();
        console.log(p);
        console.log(q);
        console.log(p === q); //true
    </script>
</body>

</html>